import os
import json
import pandas as pd
from datetime import datetime, timedelta

# 设置当前日期（根据题目要求）
current_date = datetime(2025, 7, 30)
# 计算时间范围
seven_days_ago = current_date - timedelta(days=7)
three_days_ago = current_date - timedelta(days=3)

# 初始化用户数据字典
user_data = {}

# 遍历目录处理CSV文件
base_dir = '/data/GuoCu_data/raw_data/'
for root, dirs, files in os.walk(base_dir):
    for file in files:
        if file.endswith('.csv'):
            file_path = os.path.join(root, file)
            
            # 读取CSV文件（无表头）
            try:
                df = pd.read_csv(file_path, header=None)
            except Exception as e:
                print(f"Error reading {file_path}: {e}")
                continue
            
            # 筛选有效行
            for _, row in df.iterrows():
                if len(row) < 5:
                    continue
                
                event_time_str = str(row[0])
                event_type = str(row[1])
                extra_param = str(row[2])
                ip = str(row[4]).strip()
                
                # 检查事件类型和extraParam格式
                if event_type != 'viewport' or not extra_param.startswith('{'):
                    continue
                
                try:
                    # 解析JSON并提取id字段
                    params = json.loads(extra_param)
                    user_id = params.get('id', '')
                    
                    # 验证是否为登录事件
                    if not user_id or not isinstance(user_id, str) or not user_id.strip():
                        continue
                    
                    # 转换时间格式
                    try:
                        event_time = datetime.strptime(event_time_str, '%Y-%m-%dT%H:%M:%S')
                    except:
                        continue
                    
                    # 更新用户数据
                    if ip not in user_data:
                        user_data[ip] = {
                            'login_times': [],
                            'last_login': datetime.min
                        }
                    
                    # 记录登录时间
                    user_data[ip]['login_times'].append(event_time)
                    if event_time > user_data[ip]['last_login']:
                        user_data[ip]['last_login'] = event_time
                        
                except json.JSONDecodeError:
                    continue

# 准备结果数据集
results = []
for ip, data in user_data.items():
    login_times = data['login_times']
    
    # 计算7天内登录次数（去重同一天）
    # 提取7天内的所有登录日期并去重
    unique_login_dates = {t.date() for t in login_times if t >= seven_days_ago}
    count_7d = len(unique_login_dates)

    # 检查3天内是否登录过
    is_login_3d = any(t >= three_days_ago for t in login_times)
    
    results.append({
        'ip': ip,
        'user_last_login_time': data['last_login'].strftime('%Y-%m-%dT%H:%M:%S'),
        'user_login_count_7d': count_7d,
        'user_is_login_3d': 1 if is_login_3d else 0
    })

# 创建DataFrame并保存
result_df = pd.DataFrame(results)
result_df = result_df.sort_values(by='user_last_login_time', ascending=False)

# 确保输出目录存在
output_dir = '/data/GuoCu_data/processed_data/feature/user/'
os.makedirs(output_dir, exist_ok=True)

# 保存结果
output_path = os.path.join(output_dir, 'user_inter_login.csv')
result_df.to_csv(output_path, index=False, header=[
    'ip', 'user_last_login_time', 'user_login_count_7d', 'user_is_login_3d'
])

print(f"数据处理完成，共统计 {len(result_df)} 个用户，结果已保存至: {output_path}")